package com.jdd.common.util;

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.util.Arrays;

public class CrcUtil {




		//new 2
		/**
	     * 计算CRC16校验码
	     *
	     * @param bytes 字节数组
	     * @return {@link String} 校验码
	     * @since 1.0
	     */
	    public static byte[] getCRC(byte[] bytes) {
	        int CRC = 0x0000ffff;
	        int POLYNOMIAL = 0x0000a001;
	        int i, j;
	        for (i = 0; i < bytes.length; i++) {
	            CRC ^= ((int) bytes[i] & 0x000000ff);
	            for (j = 0; j < 8; j++) {
	                if ((CRC & 0x00000001) != 0) {
	                    CRC >>= 1;
	                    CRC ^= POLYNOMIAL;
	                } else {
	                    CRC >>= 1;
	                }
	            }
	        }
	        CRC &= 0xffff;
	        //String temp = Integer.toHexString(CRC).toUpperCase();
	        byte[] crcByte = new byte[2];
	        crcByte[0] = (byte) ((CRC >> 8) & 0xff);
			crcByte[1] = (byte) (CRC & 0xff);
	        return crcByte;
	    }
	    

	    


	 
	    private static String hexString = "0123456789ABCDEF";
	 
	    /*
	     * 将字符串编码成16进制数字,适用于所有字符（包括中文）
	     */

	    /**
	     * 将16进制数字解码成字符串,适用于所有字符（包括中文）
	     */
	    public static String decode(String bytes, String charset) throws UnsupportedEncodingException {
	        ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length()/2);
	        //将每2位16进制整数组装成一个字节
	        for(int i=0;i<bytes.length();i+=2){
	            baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
	        }
	        return new String(baos.toByteArray(), charset);
	    }



	    
}
